package com.abner.design.patterns.singleton;

/**
 * 线程不安全懒汉式
 * @Author: abner
 * @Date: 2022-04-22-11:01
 **/
public class SingletonType3 {

    public static void main(String[] args) {
        Singleton3 instance1 = Singleton3.getInstance3();
        Singleton3 instance2 = Singleton3.getInstance3();
        System.out.println(instance1 == instance2);
        System.out.println(instance1.hashCode() == instance2.hashCode());
    }
}

/**
 * 优缺点说明:
 *      1) 起到了 Lazy Loading 的效果，但是只能在单线程下使用。
 *      2) 如果在多线程下，一个线程进入了 if (singleton == null)判断语句块，还未来得及往下执行，另一个线程也通过
 *         了这个判断语句，这时便会产生多个实例。所以在多线程环境下不可使用这种方式
 *      3) 结论：在实际开发中，不要使用这种方式.
 */
class Singleton3 {

    private static Singleton3 singleton3;

    private Singleton3() {};

    public static Singleton3 getInstance3() {
        if(null == singleton3) {
            singleton3 = new Singleton3();
        }
        return singleton3;
    }
}
